package com.ruoyi.produce.base.shift.service;

import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.produce.base.shift.domain.ProduceShiftInfo;
import com.ruoyi.produce.base.shift.mapper.ProduceShiftInfoMapper;
import com.ruoyi.produce.base.shift.util.shiftInfoNoUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 班次信息信息
 * 业务层处理
 * @author lsy
 */
@Service
public class ProduceShiftInfoImpl implements IProduceShiftInfoService{

    @Autowired
    private ProduceShiftInfoMapper produceShiftInfoMapper;

    /**
     * 查询班次
     * @param produceShiftInfo
     * @return
     */
    @Override
    public List<ProduceShiftInfo> selectProduceShiftInfoList(ProduceShiftInfo produceShiftInfo) {
        return produceShiftInfoMapper.selectProduceShiftInfoList(produceShiftInfo);
    }

    /**
     * 通过编号查询班次
     * @param shiftInfoId
     * @return
     */
    @Override
    public ProduceShiftInfo selectProduceShiftInfoById(String shiftInfoId) {
        return produceShiftInfoMapper.selectProduceShiftInfoById(shiftInfoId);
    }

    /**
     * 新增班次
     * @param produceShiftInfo
     * @return
     */
    @Override
    public int insertProduceShiftInfo(ProduceShiftInfo produceShiftInfo) {
        if (StringUtils.isNotNull(produceShiftInfoMapper.selectProduceShiftInfoById(produceShiftInfo.getShiftInfoId()))) {
            //存在
            return 0;
        }
        //不存在
        return produceShiftInfoMapper.insertProduceShiftInfo(produceShiftInfo);
    }

    /**
     * 修改班次
     * @param produceShiftInfo
     * @return
     */
    @Override
    public int updateProduceShiftInfo(ProduceShiftInfo produceShiftInfo) {
        if (!StringUtils.isNotNull(produceShiftInfoMapper.selectProduceShiftInfoById(produceShiftInfo.getShiftInfoId()))) {
            //不存在
            return 0;
        }
        return produceShiftInfoMapper.updateProduceShiftInfo(produceShiftInfo);
    }

    /**
     * 删除班次
     * 仅修改删除标志
     * @param produceShiftInfo
     * @return
     */
    @Override
    public int updateProduceShiftInfoDeleteFlag(ProduceShiftInfo produceShiftInfo) {
        return produceShiftInfoMapper.updateProduceShiftInfoDeleteFlag(produceShiftInfo);
    }

    /**
     * 生成最新的班次编号
     * @return
     */
    @Override
    public String createShiftInfoId() {
        // 取当前最新时间，并获取时分秒的值
        Date date = new Date();
        String shiftInfoId = "";
        Calendar currentCalendar = new GregorianCalendar();
        currentCalendar.setTime(date);
        int currentHour = currentCalendar.get(Calendar.HOUR_OF_DAY);// 获取小时
        if (currentHour >= 7 && currentHour < 19) {
            //当天白班
            shiftInfoId = shiftInfoNoUtil.createShiftInfoId(1, 1);
        } else if (currentHour < 7) {
            // 当时间是第二天凌晨到早班开始期间，班次为昨日的夜班班次
            shiftInfoId = shiftInfoNoUtil.getNightId();
        } else {
            //当天夜班
            shiftInfoId = shiftInfoNoUtil.createShiftInfoId(1, 2);
        }
        return shiftInfoId;
    }

    /**
     * 生成当天白班编号
     * @return
     */
    @Override
    public String createDayShiftId() {
        return shiftInfoNoUtil.createShiftInfoId(1, 1);
    }

    /**
     * 生成明天白班编号
     * @return
     */
    @Override
    public String createDayTomorrowShiftId() {
        return shiftInfoNoUtil.createShiftInfoId(2, 1);
    }

    /**
     * 生成当天夜班编号
     * @return
     */
    @Override
    public String createNightShiftId() {
        return shiftInfoNoUtil.createShiftInfoId(1, 2);
    }

    /**
     * 生成明天夜班编号
     * @return
     */
    @Override
    public String createNightTomorrowShiftId() {
        return shiftInfoNoUtil.createShiftInfoId(2, 2);
    }

}
